'''
Created on 18/05/2012

@author: rcasal
'''


if 0:
    None
    import gluon
    global dbAfiliaciones; dbAfiliaciones = gluon.sql.DAL()
    from PlanAfiliado import PlanAfiliado
            
class AfiliadoRepository():
    
    @staticmethod 
    def findAfiliadoByTipoDocAndNroDoc(tipo, numero):
        return dbAfiliaciones((dbAfiliaciones.Afiliados.DocumentoTipo == tipo)&(dbAfiliaciones.Afiliados.DocumentoNro == numero)).select()
    
    @staticmethod 
    def findAfiliadoByCuil(cuil):
        return dbAfiliaciones(dbAfiliaciones.Afiliados.CUIL == cuil).select().last()
    
    @staticmethod   
    def findAll():
        return dbAfiliaciones(dbAfiliaciones.Afiliados.id > 0).select()    
    
    @staticmethod
    def __buscarPlanConBaja(planes, field_id, idAfiliado):
        
        plan = None
        MOTIVO_SIN_SERVICIO = 31
        
        for nombre in planes:
            if plan == None:
                c = dbAfiliaciones(dbAfiliaciones[nombre][field_id] == idAfiliado).select(orderby = ~dbAfiliaciones[nombre].FechaModificacion | dbAfiliaciones[nombre].FechaBaja).last()
                if c:
                    plan = PlanAfiliado(nombre, idAfiliado, c.FechaBaja, c.FechaModificacion, c.IDMotivoBaja)
            elif (plan.fechaBaja != None) or (plan.motivoBaja != MOTIVO_SIN_SERVICIO):
                c = dbAfiliaciones(dbAfiliaciones[nombre][field_id] == idAfiliado).select(orderby = ~dbAfiliaciones[nombre].FechaModificacion | dbAfiliaciones[nombre].FechaBaja).last()
                if c:
                    if (c.FechaModificacion > plan.fechaModificacion):
                        plan = PlanAfiliado(nombre, idAfiliado, c.FechaBaja, c.FechaModificacion, c.IDMotivoBaja)
            else:
                break
        return plan
    
    @staticmethod
    def findAfiliadoCondicionById(idAfiliado):

        nombres_planes_titular = ['PlanPasivoXTitular', 
                         'PlanActivoXTitular', 
                         'PlanAdherenteXTitular', 
                         'PlanMonotributistaXTitular',
                         'PlanVoluntarioXTitular',
                         'PlanAltasSSSXTitular',
                         'PlanJubiladoTramiteXTitular',
                         'PlanBajasOpcionXTitular',
                         'PlanServicioDomesticoXTitular']
        
        nombres_planes_familiar = ['PlanActivoXFamiliar', 
                         'PlanPasivoXFamiliar', 
                         'PlanAdherenteXFamiliar', 
                         'PlanVoluntarioXFamiliar',
                         'PlanMonotributistaXFamiliar',
                         'PlanServicioDomesticoXFamiliar',
                         'PlanJubiladoTramiteXFamiliar']
        
        planTitular = AfiliadoRepository.__buscarPlanConBaja(nombres_planes_titular, 'IDTitular', idAfiliado) 
        
        if planTitular:
            if planTitular.fechaBaja == None:
                return planTitular
            else:
                planFamiliar = AfiliadoRepository.__buscarPlanConBaja(nombres_planes_familiar, 'IDFamiliar', idAfiliado) 
                if planFamiliar:
                    if planFamiliar.fechaBaja == None:
                        return planFamiliar
                    elif planTitular.motivoBaja == 31 and planFamiliar.motivoBaja != 31:
                        return planTitular
                    elif planTitular.motivoBaja != 31 and planFamiliar.motivoBaja == 31:
                        return planFamiliar
                    elif planTitular.fechaModificacion > planFamiliar.fechaModificacion:
                        return planTitular
                    else:
                        return planFamiliar
        else:
            planFamiliar = AfiliadoRepository.__buscarPlanConBaja(nombres_planes_familiar, 'IDFamiliar', idAfiliado)    
            return planFamiliar



#        MOTIVO_SIN_SERVICIO = 31
#        now = datetime.datetime.now().strftime("%Y%m%d")
        
#        for nombre in nombres_planes_titular:
#            if plan == None:
#                c = dbAfiliaciones(dbAfiliaciones[nombre].IDTitular == idAfiliado).select(orderby = ~dbAfiliaciones[nombre].FechaModificacion | dbAfiliaciones[nombre].FechaBaja).last()
#                if c:
#                    plan = PlanAfiliado(nombre, idAfiliado, c.FechaBaja, c.FechaModificacion, c.IDMotivoBaja)
#            elif (plan.fechaBaja != None) or (plan.motivoBaja != MOTIVO_SIN_SERVICIO):
#                c = dbAfiliaciones(dbAfiliaciones[nombre].IDTitular == idAfiliado).select(orderby = ~dbAfiliaciones[nombre].FechaModificacion | dbAfiliaciones[nombre].FechaBaja).last()
#                if c:
#                    if (c.FechaModificacion > plan.fechaModificacion):
#                        plan = PlanAfiliado(nombre, idAfiliado, c.FechaBaja, c.FechaModificacion, c.IDMotivoBaja)
#            else:
#                break
